perm filename PRED1.FAI[SYS,HE]1 blob sn#009295 filedate 1972-12-06 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00005 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	TITLE OCULT   -   A HIDDEN LINE ELIMINATOR   -   AUGUST 1972.
 00005 00003	ZDEPTH(F,V)
 00007 00004	RINGIN(E,R,N) - RING IN E JUST LEFT OF R AT Nth WORD.
 00009 00005	SUBR(POTEN.)
 00010 ENDMK
⊗;
TITLE OCULT   -   A HIDDEN LINE ELIMINATOR   -   AUGUST 1972.
COMMENT /

/
;GEOMETRIC 2D LOCII ROUTINES.

;QEV(E,V).
SUBR(QEV)
BEGIN QEV
	ACCUMULATORS{E,V}
	LAC V,ARG1
	LAC E,ARG2
	LAC 1,CC(E)
	LAC BB(E)↔FMPR YPP(V)↔FADR 1,0
	LAC AA(E)↔FMPR XPP(V)↔FADR 1,0
	RET2
BEND

;QFEV(F,E,V).
SUBR(QFEV)
BEGIN QFEV
	ACCUMULATORS{E,V}
	LAC V,ARG1
	LAC E,ARG2
	LAC 1,CC(E)
	LAC BB(E)↔FMPR YPP(V)↔FADR 1,0
	LAC AA(E)↔FMPR XPP(V)↔FADR 1,0
	PFACE 0,E↔CAME 0,ARG3↔MOVNS 1
	RET3
BEND

;CROSSING(X,Y,E1,E2).
SUBR(CROSSING)
BEGIN CROSSING
	ACCUMULATORS{TT,XPTR,YPTR,E1,E2}
	LAC E2,ARG1
	LAC E1,ARG2
	LAC YPTR,ARG3
	LAC XPTR,ARG4
	LAC AA(E1)↔FMPR BB(E2)
	LAC 1,AA(E2)↔FMPR 1,BB(E1)↔FSBR 0,1↔DAC TT
	LAC BB(E1)↔FMPR CC(E2)
	LAC 1,BB(E2)↔FMPR 1,CC(E1)↔FSBR 0,1↔FDVR 0,TT↔DAC(XPTR)
	LAC CC(E1)↔FMPR AA(E2)
	LAC 1,CC(E2)↔FMPR 1,AA(E1)↔FSBR 0,1↔FDVR 0,TT↔DAC(YPTR)
	RET4
BEND
;ZDEPTH(F,V)
SUBR(ZDEPTH)
BEGIN ZDEPTH
	ACCUMULATORS{F,V}
	LAC V,ARG1
	LAC F,ARG2
	LAC 1,KK(F)
	LAC AA(F)↔FMPR XPP(V)↔FSBR 1,0
	LAC BB(F)↔FMPR YPP(V)↔FSBR 1,0
	FDVR 1,CC(F)
	RET2
BEND

;ZDALT(F,X,Y)
SUBR(ZDALT)
BEGIN ZDALT
	ACCUMULATORS{F}
	LAC F,ARG3
	LAC 1,KK(F)
	LAC AA(F)↔FMPR ARG2↔FSBR 1,0
	LAC BB(F)↔FMPR ARG1↔FSBR 1,0
	FDVR 1,CC(F)
	RET3
BEND

;UFACE(E,V)
SUBR(UFACE)
BEGIN UFACE
	ACCUMULATORS{E,V}
	LAC E,ARG2
	NVT V,E↔CAMN V,ARG1↔GO[NUF 1,E↔RET2]
	PVT V,E↔CAMN V,ARG1↔GO[PUF 1,E↔RET2]
	FATAL(UFACE)
	LIT
BEND

;UFACE.(Q,E,V)
SUBR(UFACE.)
BEGIN UFACE.
	ACCUMULATORS{Q,E,V}
	CDR E,ARG2
	CDR Q,ARG3
	NVT V,E↔CAMN V,ARG1↔GO[NUF. Q,E↔RET3]
	PVT V,E↔CAMN V,ARG1↔GO[PUF. Q,E↔RET3]
	FATAL(UFACE.)
	LIT
BEND
;RINGIN(E,R,N) - RING IN E JUST LEFT OF R AT Nth WORD.
SUBR RINGIN
BEGIN RINGIN
	ACCUMULATORS{Q,E,R}
	CDR E,ARG3
	CDR R,ARG2
	LAC ARG1
	DAP .+1↔CDR Q,(E)↔JUMPE Q,L
	CAME Q,E↔RET3; E AIN'T EMPTY.
L:	DAP .+1↔CAR Q,(R)
	DAP .+1↔DAP E,(Q)
	DAP .+1↔DIP E,(R)
	DAP .+1↔DIP Q,(E)
	DAP .+1↔DAP R,(E)
	RET3
BEND

;RINGO(E,N) - RING OUT E AT Nth WORD - LEAVE E LEGALLY EMPTY.
SUBR RINGO
BEGIN RINGO
	ACCUMULATORS{Q,E,R}
	CDR ARG1↔CDR E,ARG2
	DAP .+1↔CAR Q,(E)↔JUMPE Q,L
	DAP .+1↔CDR R,(E)
	DAP .+1↔DAP R,(Q)
	DAP .+1↔DIP Q,(R)
L:	SLAP E,E
	DAP .+1↔DAC E,(E)
	RET2
BEND

;EMPTY(E,N) - RETURNS TRUE WHEN RING IS EMPTY.
SUBR(EMPTY)
BEGIN EMPTY
	CDR ARG1
	CDR 1,ARG2
	DAP .+1↔CDR (1)
	SKIPN↔RET2
	CAME 1↔SETZ 1,↔RET2
BEND
SUBR(POTEN.)
	LAC 1,ARG1↔MARKZ 1,VISIBLE↔MARK 1,POTENT↔RET1
SUBR(HIDE.)
	LAC 1,ARG1↔MARKZ 1,POTENT∨VISIBLE↔RET1
SUBR(VISIB.)
	LAC 1,ARG1↔MARK 1,VISIBLE↔MARKZ 1,POTENT↔RET1
SUBR(FOLD.)
	LAC 1,ARG1↔MARK  1,FOLDED ↔RET1
SUBR(TJUT.)
	LAC 1,ARG1↔MARK  1,1B3↔RET1
SUBR(TJOT.)
	LAC 1,ARG1↔MARK  1,1B4↔RET1
SUBR(TJUT)
	LAC 1,ARG1↔CAR 1,(1)↔ANDI 1,(1B3)↔RET1
SUBR(TJOT)
	LAC 1,ARG1↔CAR 1,(1)↔ANDI 1,(1B4)↔RET1
SUBR(TJ)
	LAC 1,ARG1↔CAR 1,(1)↔ANDI 1,(3B4)↔RET1

END